package com.liaoban.app.api.manager;

import com.liaoban.app.api.type.CallReq;
import com.liaoban.app.api.type.Grade;
import com.liaoban.app.api.type.MessageIndex;
import com.liaoban.app.api.type.Notice;
import com.liaoban.app.api.type.Anchor;
import com.liaoban.app.api.type.Band;
import com.liaoban.app.api.type.Banner;
import com.liaoban.app.api.type.Black;
import com.liaoban.app.api.type.CallHistory;
import com.liaoban.app.api.type.Earn;
import com.liaoban.app.api.type.Follow;
import com.liaoban.app.api.type.Gift;
import com.liaoban.app.api.type.Img;
import com.liaoban.app.api.type.MyVideo;
import com.liaoban.app.api.type.PayIndex;
import com.liaoban.app.api.type.PayIndex2Request;
import com.liaoban.app.api.type.PayStatus;
import com.liaoban.app.api.type.Profit;
import com.liaoban.app.api.type.Rank;
import com.liaoban.app.api.type.RecommendName;
import com.liaoban.app.api.type.Report;
import com.liaoban.app.api.type.ShareTixian;
import com.liaoban.app.api.type.ThreeLoginReq;
import com.liaoban.app.api.type.TiXian;
import com.liaoban.app.api.type.WxPayIndex2;
import com.liaoban.app.api.type.request.BdingReq;
import com.liaoban.app.update.UpdateRequest;
import com.liaoban.app.update.UpdateResponse;
import com.netease.nim.avchatkit.ui.SendGift;
import com.liaoban.app.api.type.ShareContent;
import com.liaoban.app.api.type.ShareIndex;
import com.liaoban.app.api.type.ShenYu;
import com.liaoban.app.api.type.Sms;
import com.liaoban.app.api.type.User;
import com.liaoban.app.api.type.Video;
import com.liaoban.app.api.type.WuserImg;
import com.liaoban.app.api.type.comment.BaseResponse;
import com.liaoban.app.api.type.request.ActiveCallEndReq;
import com.liaoban.app.api.type.request.BindReq;
import com.liaoban.app.api.type.request.CallFaQiReq;
import com.liaoban.app.api.type.request.EarnDetailRequest;
import com.liaoban.app.api.type.request.EarnRequest;
import com.liaoban.app.api.type.request.FeedBackRequest;
import com.liaoban.app.api.type.request.GiftRequest;
import com.liaoban.app.api.type.request.ImSendGiftReq;
import com.liaoban.app.api.type.request.ImgListRequest;
import com.liaoban.app.api.type.request.RankRequest;
import com.liaoban.app.api.type.request.SendGiftReq;
import com.liaoban.app.api.type.request.SendYuMoneyReq;
import com.liaoban.app.api.type.request.WuserTypeRequest;
import com.liaoban.app.api.type.request.ImgDelRequest;
import com.liaoban.app.api.type.request.LoginRequest;
import com.liaoban.app.api.type.request.RecommendRequest;
import com.liaoban.app.api.type.request.RegisterRequest;
import com.liaoban.app.api.type.request.SearchRequest;
import com.liaoban.app.api.type.request.SettingInfoRequest;
import com.liaoban.app.api.type.request.SmsRequest;
import com.liaoban.app.api.type.request.StatusSwitchRequest;
import com.liaoban.app.api.type.request.UpdatePwdRequest;
import com.liaoban.app.api.type.request.WuserinfoRequest;

import java.util.List;
import java.util.Map;

import io.reactivex.Observable;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.PartMap;

/**
 * 服务端接口
 * Created by ybc on 2017/7/4.
 */

public interface HttpApi {

    @POST("Home/banner")
    Observable<BaseResponse<List<Banner>>> banner();

    @POST("Login/api_login")
    Observable<BaseResponse<User>> login(@Body LoginRequest loginRequest);

    @POST("Login/duanxin")
    Observable<BaseResponse<Sms>> duanxin(@Body SmsRequest smsRequest);

    @POST("Login/update_pwd")
    Observable<BaseResponse<Object>> updatePwd(@Body UpdatePwdRequest updatePwdRequest);

    @POST("Login/register")
    Observable<BaseResponse<Object>> register(@Body RegisterRequest registerRequest);

    @POST("Personalcenter/userinfo")
    Observable<BaseResponse<User>> userinfo();

    @POST("Home/recommend")
    Observable<BaseResponse<List<Anchor>>> recommend(@Body RecommendRequest recommendRequest);

    @POST("Home/recommend_name")
    Observable<BaseResponse<List<RecommendName>>> recommendName();

    @POST("Home/wuser_type")
    Observable<BaseResponse<List<Anchor>>> wuserType(@Body WuserTypeRequest homePictureRequest);

    @POST("Userbehavior/seting_fankui")
    Observable<BaseResponse<Object>> feedBack(@Body FeedBackRequest feedBackRequest);

    @POST("Userbehavior/seting_info_commit")
    Observable<BaseResponse<Object>> settingInfoSubmit(@Body SettingInfoRequest settingInfoRequest);

    @POST("Home/Wuserinfo")
    Observable<BaseResponse<Anchor>> wuserinfo(@Body WuserinfoRequest wuserinfoRequest);

    @POST("Userbehavior/im_wuser_info")
    Observable<BaseResponse<Anchor>> imUserInfo(@Body WuserinfoRequest wuserinfoRequest);

    @POST("Userbehavior/follow")
    Observable<BaseResponse<Object>> follow(@Body WuserinfoRequest wuserinfoRequest);

    @POST("Personalcenter/my_follow")
    Observable<BaseResponse<List<Follow>>> myFollow();

    @POST("Personalcenter/my_fans")
    Observable<BaseResponse<List<Follow>>> myFans();

    @POST("Personalcenter/long_out")
    Observable<BaseResponse<BaseResponse>> logout();

    @POST("Prove/api_is_prove")
    Observable<BaseResponse<Object>> isProve();

    @POST("Personalcenter/status_switch")
    Observable<BaseResponse<Object>> statusSwitch(@Body StatusSwitchRequest statusSwitchRequest);

    @POST("Report/report_list")
    Observable<BaseResponse<List<Report>>> reportList();

    @POST("Home/band")
    Observable<BaseResponse<List<Band>>> band();

    //认证
    @Multipart
    @POST("Prove/api_prove")
    Observable<BaseResponse<Object>> prove(@PartMap Map<String, RequestBody> map);

    //举报提交
    @Multipart
    @POST("Report/add_report")
    Observable<BaseResponse<Object>> addReport(@PartMap Map<String, RequestBody> map);

    @POST("Search/wuser_search")
    Observable<BaseResponse<List<Follow>>> search(@Body SearchRequest searchRequest);

    //头像上传
    @Multipart
    @POST("Userbehavior/head_img_upload")
    Observable<BaseResponse<String>> headImgUpload(@PartMap Map<String, RequestBody> map);

    @POST("Home/wuser_list_name")
    Observable<BaseResponse<List<RecommendName>>> wuserListName();

    @POST("Home/wuser_list")
    Observable<BaseResponse<List<Anchor>>> wuserList(@Body WuserTypeRequest homePictureRequest);

    @POST("Userbehavior/img_list")
    Observable<BaseResponse<List<Img>>> imgList(@Body ImgListRequest imgListRequest);

    @POST("Userbehavior/video_list")
    Observable<BaseResponse<List<MyVideo>>> videoList(@Body ImgListRequest imgListRequest);

    //我的图册（上传图片）
    @Multipart
    @POST("Userbehavior/img_upload")
    Observable<BaseResponse<Img>> imgUpload(@PartMap Map<String, RequestBody> map);

    //我的视频（上传视频）
    @Multipart
    @POST("Userbehavior/video_upload")
    Observable<BaseResponse<MyVideo>> videoUpload(@PartMap Map<String, RequestBody> map);

    @POST("Userbehavior/img_delete")
    Observable<BaseResponse<Object>> imgDelete(@Body ImgDelRequest imgDelRequest);

    @POST("Userbehavior/video_delete")
    Observable<BaseResponse<Object>> videoDelete(@Body ImgDelRequest imgDelRequest);

    @POST("Personalcenter/call_list")
    Observable<BaseResponse<List<CallHistory>>> callList();

    @POST("Home/Wuser_gift_list")
    Observable<BaseResponse<List<Gift>>> wuserGiftList(@Body GiftRequest giftRequest);

    @POST("Home/Wuser_video_list")
    Observable<BaseResponse<List<Video>>> wuserVideoList(@Body GiftRequest giftRequest);

    @POST("Home/Wuser_img_list")
    Observable<BaseResponse<List<WuserImg>>> wuserImgList(@Body GiftRequest giftRequest);

    @POST("Userbehavior/wuser_black")
    Observable<BaseResponse<Object>> wuserBlack(@Body WuserinfoRequest wuserinfoRequest);

    @POST("Personalcenter/black_list")
    Observable<BaseResponse<List<Black>>> blackList();

    @POST("Home/band_list")
    Observable<BaseResponse<List<Rank>>> bandList(@Body RankRequest rankRequest);

    @POST("Personalcenter/user_money")
    Observable<BaseResponse<List<Earn>>> userMoney(@Body EarnRequest earnRequest);

    @POST("Personalcenter/user_money_details")
    Observable<BaseResponse<Earn>> userMoneyDetails(@Body EarnDetailRequest earnDetailRequest);

    @POST("Share/index")
    Observable<BaseResponse<ShareIndex>> shareIndex();

    @POST("Share/share")
    Observable<BaseResponse<ShareContent>> share();

    @POST("Personalcenter/pay_index")
    Observable<BaseResponse<PayIndex>> payIndex();

    @POST("pay/index")
    Observable<BaseResponse<String>> payIndex2(@Body PayIndex2Request payIndex2Request);

    @POST("pay/index")
    Observable<BaseResponse<WxPayIndex2>> payIndex2Wx(@Body PayIndex2Request payIndex2Request);

    @POST("Home/near_user")
    Observable<BaseResponse<List<Anchor>>> nearUser();

    @POST("Personalcenter/message_list")
    Observable<BaseResponse<List<Notice>>> messageList();

    @POST("Personalcenter/message_index")
    Observable<BaseResponse<MessageIndex>> messageIndex();

    @POST("Pay/pay_status")
    Observable<BaseResponse<PayStatus>> payStatus();

    @POST("Speek/im_send_gift")
    Observable<BaseResponse<Integer>> imSendGift(@Body ImSendGiftReq imSendGiftReq);

    @POST("Speek/call_faqi")
    Observable<BaseResponse<CallReq>> callFaQi(@Body CallFaQiReq callFaQiReq);

    @POST("Speek/call_jietong")
    Observable<BaseResponse<CallReq>> callJieTong(@Body CallFaQiReq callFaQiReq);

    @POST("Speek/active_callend")
    Observable<BaseResponse<Object>> activeCallEnd(@Body ActiveCallEndReq activeCallEndReq);

    @POST("Speek/send_gift")
    Observable<BaseResponse<SendGift>> sendGift(@Body SendGiftReq sendGiftReq);

    @POST("Personalcenter/tixian_status")
    Observable<BaseResponse<TiXian>> tixianStatus();

    @POST("Personalcenter/bangding")
    Observable<BaseResponse<Object>> bangding(@Body BindReq bindReq);

    @POST("Speek/send_yu_money")
    Observable<BaseResponse<ShenYu>> sendYuMoney(@Body SendYuMoneyReq sendYuMoneyReq);

    @POST("Personalcenter/grade")
    Observable<BaseResponse<List<Grade>>> grade();

    @POST("Personalcenter/Profit")
    Observable<BaseResponse<Profit>> profit();

    @POST("Share/tixian_status")
    Observable<BaseResponse<ShareTixian>> shareTiXianStatus();

    @POST("Personalcenter/tixian")
    Observable<BaseResponse<Object>> tixian();

    @POST("Share/tixian")
    Observable<BaseResponse<Object>> shareTixian();

    @POST("Login/three_login")
    Observable<BaseResponse<User>> threeLogin(@Body ThreeLoginReq threeLoginReq);

    @POST("Login/bding_tell")
    Observable<BaseResponse<User>> bdingTell(@Body BdingReq bdingReq);

    @POST("Home/version")
    Observable<BaseResponse<UpdateResponse>> version(@Body UpdateRequest updateRequest);
}

